using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 1/3/2014 9:40:41 AM
    /// </summary>
    [Serializable]
    public class RecepcionProcesoLista : ReadOnlyListBase<RecepcionProcesoLista, RecepcionProcesoInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(RecepcionProcesoLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static RecepcionProcesoLista GetRecepcionProcesoLista(RecepcionProcesoSingleCriteria filter)
        {
            return DataPortal.Fetch<RecepcionProcesoLista>(filter);
        }
        public static RecepcionProcesoLista GetRecepcionProcesoLista(RecepcionProcesoCriteria filter)
        {
            return DataPortal.Fetch<RecepcionProcesoLista>(filter);
        }
        private RecepcionProcesoLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(RecepcionProcesoSingleCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_exp_id", criteria.ExpedienteId),
                        new Parametro("ec_estado", criteria.Estado)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_RECEPPROCESO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(RecepcionProcesoInfo.GetRecepcionProcesoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        //
        private void DataPortal_Fetch(RecepcionProcesoCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            DataSet datos = new DataSet();
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                       
                        new Parametro("ec_estado", criteria.Estado),
                        new Parametro("ec_rep_jefatura", criteria.JefaturaCode)
                    };
            if (criteria.IfListaTecnico == true)
            {
                datos = accesoDatos.EjecutarDataSet("\"LISTA_RECEPPROCESO_JEF_TEC\"", parametros);
            }
            else
            {
                datos = accesoDatos.EjecutarDataSet("\"LISTA_RECEPPROCESO_JEF\"", parametros);
            }
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(RecepcionProcesoInfo.GetRecepcionProcesoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 1/3/2014 9:40:41 AM
    /// </summary>
    [Serializable]
    public class RecepcionProcesoInfo : ReadOnlyBase<RecepcionProcesoInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public DateTime Fecha { get; internal set; }
        public string ExpedienteId { get; internal set; }
        public string ExpedienteNombre { get; internal set; }
        public string FaseCodigo { get; internal set; }
        public string FaseNombre { get; internal set; }
        public string Tabla { get; internal set; }
        public string TablaId { get; internal set; }

        public string FaseId { get; internal set; }
        public string ListaTecnicos { get; internal set; }
        public string JefeturaCodigo { get; internal set; }
        public string FaseLicId { get; internal set; }
        public string EstadoFase { get; internal set; }
        public string Instruccion { get; internal set; }
        #endregion

        #region Factory Methods

        internal static RecepcionProcesoInfo GetRecepcionProcesoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<RecepcionProcesoInfo>(childData);
        }

        private RecepcionProcesoInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
      
        private void Child_Fetch(DataRow childData)
        {
            Id = Guid.Parse(childData["rep_id"].ToString());
            FaseCodigo = childData["rep_codigo_fase"].ToString();
            Tabla = childData["rep_tabla"].ToString();
            TablaId = childData["rep_id_tabla"].ToString();
            if (childData["rep_fecha"].ToString() != "")
                Fecha = DateTime.Parse(childData["rep_fecha"].ToString());
            ExpedienteId = childData["exp_id"].ToString();
            ExpedienteNombre = childData["exp_nombre"].ToString();           
            FaseNombre = childData["fas_nombre"].ToString();
            FaseId = childData["fas_id"].ToString();           
            JefeturaCodigo = childData["rep_jefatura"].ToString();
            //
            if (childData.Table.Columns.Contains("fal_id"))
                FaseLicId = childData["fal_id"].ToString();
            if (childData.Table.Columns.Contains("fal_estado_fase"))
                EstadoFase = childData["fal_estado_fase"].ToString();
            //
            if (childData.Table.Columns.Contains("tecnicos"))
                ListaTecnicos = childData["tecnicos"].ToString();
            if (!(childData["rep_detalle"] is DBNull))
            Instruccion = childData["rep_detalle"].ToString();
        }

        #endregion
    }
}
